package com.meme.editor.level.define;

import com.meme.editor.level.Actor;
import com.meme.editor.property.Property;
import com.meme.editor.property.PropertyGroupSet;
import java.util.List;
import java.util.Vector;

import com.meme.editor.EntityObject;

public class PropertyDefineBlock 
{
	String mName;
	List<PropertyDefine> mPropertyDefines = new Vector<PropertyDefine> ();
	
	public PropertyDefineBlock (String name)
	{
		mName = name;
	}
	
	public String getName ()
	{
		return mName;
	}
	
	public void addPropertyDefines (List<PropertyDefine> propertyDefineList)
	{
		mPropertyDefines.addAll (propertyDefineList);
	}
	
	public List<PropertyDefine> getPropertyDefines ()
	{
		return mPropertyDefines;
	}
	
	public List<PropertyDefine> clonePropertyDefines ()
	{
		List<PropertyDefine> newList = new Vector<PropertyDefine> ();
		for (PropertyDefine propertyDefine : mPropertyDefines)
		{
			PropertyDefine newDef = new PropertyDefine (
					propertyDefine.getName(), 
					propertyDefine.getValueType(), 
					propertyDefine.getDefaultValue(), 
					propertyDefine.getControlType(), 
					propertyDefine.getEditable()
					);
			newDef.addParamters (propertyDefine.getParameters());
			newList.add (newDef);
		}
		
		return newList;
	}
	
	public void makePropertyGroupForEntity (EntityObject entity)
	{
		entity.createPropertyGroup (getName());
		
		for (PropertyDefine propertyDefine : getPropertyDefines())
		{
			Property property = entity.createPublicProperty(
										getName(), 
										propertyDefine.getName (), 
										propertyDefine.getValueType(),
										propertyDefine.getControlType(),
										propertyDefine.getEditable ()
										);
			
			for (Parameter parameter : propertyDefine.getParameters())
			{
				property.setParameter (parameter.getName(), parameter.getStringValue());
			}
			
			property.modifyValue (propertyDefine.getDefaultValue());
		}

	}
}
